- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин
Шрифт:
Интервал:
Закладка:
JDialog
Класс JDialog расширяет класс Dialog библиотеки AWT и является «тяжеловесным» компонентом.
Он создает модальные или немодальные диалоговые окна.
Напомним, что модальное окно блокирует графический интерфейс пользователя, пока не будет закрыто.
Каждое диалоговое окно обязательно связано с родительским AWT окном Window, Dialog или Frame.
Диалоговое окно снабжено рамкой и строкой заголовка, в которую помещается строка, записанная в конструкторе.
В строке заголовка есть кнопка Закрыть, реакцию на которую, а заодно и реакцию на нажатие комбинации клавиш <Alt> + <F4>, можно установить методом setDefaultCloseOperation.
Модальность окна и его заголовок можно изменить методами setModalityType и setTitle.
По умолчанию диалоговое окно может изменять свои размеры, но это правило можно поменять унаследованным методом setResizable.
Как уже говорилось ранее, Swing предоставляет контейнеры верхнего уровня: JFrame, JDialog и JWindow.
При использовании этих классов, чтобы отображаться на экране, каждый компонент GUI должен быть частью иерархии компонентов, в которой в качестве корня используется контейнер верхнего уровня.
При этом каждый GUI компонент может содержаться только один раз.
Если компонент уже находится в контейнере, и вы пытаетесь добавить его в другой контейнер, компонент будет удален из первого контейнера, а затем добавлен ко второму.
Каждый контейнер верхнего уровня имеет панель содержимого contentPane, которая содержит видимые компоненты контейнера верхнего уровня.
Вы можете дополнительно добавить панель меню в контейнер верхнего уровня.
Панель меню расположена в контейнере верхнего уровня, но вне панели содержимого.
Получить панель содержимого контейнера верхнего уровня можно с помощью метода getContentPane.
Панель содержимого по умолчанию – это простой промежуточный контейнер, который наследуется от JComponent и использует BorderLayout в качестве менеджера компоновки.
Однако можно создать панель JPanel и установить ее как панель содержимого, используя метод setContentPane контейнера верхнего уровня.
Вы можете напрямую добавлять компоненты в контейнер верхнего уровня методом add, при этом они будут добавляться в панель содержимого.
Устройство контейнера верхнего уровня еще более сложное, чем это кажется на первый взгляд.
Каждый контейнер верхнего уровня использует промежуточный контейнер, называемый корневой панелью root pane.
Корневая панель управляет панелью содержимого и панелью меню вместе с несколькими другими контейнерами.
Здесь слоистая панель layered pane содержит панель меню и панель содержимого и обеспечивает упорядочивание других компонентов по оси Z.
Стеклянная панель glass pane часто используется для перехвата входных событий, проходящих через контейнер верхнего уровня, а также может использоваться для рисования поверх нескольких компонентов.
Здесь показан пример создания пользовательского диалога.
В конструкторе класса используется панель содержимого для создания интерфейса диалога.
Также переопределяется метод createRootPane, который создает корневую панель, для закрытия диалога при нажатии кнопки «Escape».
В этом методе используется метод getKeyStroke класса KeyStroke для установки нажатия клавиши ESCAPE.
Также создается действие AbstractAction, реализующее метод actionPerformed, в котором используются методы setVisible и dispose, чтобы сделать окно невидимым и удалить его.
Таким образом определенные KeyStroke и AbstractAction используются в созданной корневой панели JRootPane.
Метод getInputMap класса JRootPane используется для получения входной карты, когда компонент имеет фокус.
Во входной карте мы устанавливаем нажатие клавиши «ESCAPE».
Мы также получаем карту действия ActionMap, чтобы связать действие и нажатие клавиши.
Glass Pane
Здесь показан пример использования панели Glass Pane для рисования поверх компонентов, содержащихся в панели содержимого.
Пользовательская панель Glass Pane устанавливается для контейнера верхнего уровня методом setGlassPane.
Так как по умолчанию она невидима, для нее нужно вызвать метод setVisible (true).
Панель по умолчанию можно получить методом getGlassPane контейнера верхнего уровня.
Слоистая панель Layered Pane представляет собой контейнер с глубиной, так что перекрывающиеся компоненты могут отображаться один поверх другого.
Каждая корневая панель root pane контейнера верхнего уровня помещает панель меню и панель содержимого в экземпляр слоистой панели JLayeredPane.
Порядок Z слоистой панели обеспечивает такое поведение, как отображение всплывающих меню над другими компонентами.
Слоистая панель может использоваться для размещения компонентов один над другим по оси Z, создавая таким образом 3D эффект глубины.
Панель по умолчанию можно получить методом getLayeredPane контейнера верхнего уровня.
Установить пользовательскую панель для контейнера верхнего уровня можно методом setLayeredPane.
Компоненты добавляются в панель методом add, при этом указывается позиция на оси Z компонента.
По умолчанию слоистая панель не имеет менеджера компоновки, поэтому для размещения компонентов используется метод setBounds.
JInternalFrame
С помощью классов JInternalFrame и JDesktopPane можно создавать многооконные приложения, в которых программа имеет одну большую панель «рабочий стол», которая содержит все остальные окна.
Другие окна могут быть минимизированы и перемещаться в пределах этой панели рабочего стола, но не перемещается за пределы панели.
Кроме того, минимизация панели рабочего стола скрывает все содержащиеся окна.
Класс JDesktopPane расширяет класс JLayeredPane специально для работы с внутренними окнами JInternalFrame.
Объект JDesktopPane представляет собой контейнер, используемый для создания интерфейса с несколькими документами или виртуального рабочего стола.
Вы создаете объекты JInternalFrame и добавляете их в объект JDesktopPane.
Объект JInternalFrame представляет собой легковесный объект, который обеспечивает многие функции нативного или тяжеловесного фрейма, включая перетаскивание, закрытие, минимизирование, изменение размера, отображение заголовка и поддержку строки меню.
Каждое внутреннее окно JInternalFrame содержит корневую панель JRootPane.
При использовании внутренних окон вы должны установить их размер.
Если вы не установите размер внутреннего фрейма, он будет иметь нулевой размер и, следовательно, никогда не будет виден.
Вы можете установить размер, используя один из методов setSize, pack или setBounds.
Также вы должны установить местоположение внутреннего фрейма.
Если вы не установите местоположение внутреннего фрейма, он будет установлен в верхний левый угол контейнера.
Вы можете использовать метод setLocation или setBounds, чтобы указать верхнюю левую точку внутреннего фрейма относительно контейнера.
Диалоги для внутренних фреймов должны быть реализованы с использованием JOptionPane или JInternalFrame, а не JDialog, который является тяжеловесным контейнером.
По умолчанию внутренние фреймы невидимы, поэтому для их отображения нужно вызвать метод setVisible (true) или show.
При создании внутреннего фрейма нужно явно указывать, что он содержит кнопки Свернуть, Развернуть, Закрыть, и может изменять размеры.
JOptionPane
Хотя класс JDialog позволяет создавать любые диалоговые окна, в подавляющем большинстве случаев их назначение сводится к выводу сообщений, подтверждению или отмене каких-то действий и вводу данных.
Класс JOptionPane предоставляет большой набор статических методов для создания модальных диалоговых окон.
Класс JOptionPane не расширяет класс JDialog, а напрямую расширяет класс JComponent, и является скорее фабрикой для создания диалоговых окон, чем просто компонентом.
Класс JOptionPane предоставляет методы showMessageDialog с разными аргументами, создающие окна сообщений.
Методы

